home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / dev / basic / AmosBlitz_src.lha / Sourcecodes / DungeonHero.AMOS / DungeonHero.amosSourceCode
Encoding:
AMOS Source Code  |  1995-10-14  |  17.3 KB  |  546 lines

  1. Screen Open 0,320,256,16,Lowres : Flash Off : Close Workbench 
  2. Break Off : Amos Lock 
  3. TITEL:
  4. Unpack 0 To 0 : Limit Mouse 236,168 To 328,235
  5. Reserve Zone 3
  6. Set Zone 1,110,128 To 197,147 : Rem <- Start Knopf 
  7. Set Zone 2,110,150 To 197,168 : Rem <- Passwort Knopf  
  8. Set Zone 3,110,171 To 197,191 : Rem <- Ende Knopf  
  9.  
  10. Do 
  11.    If 1=Hzone(X Mouse,Y Mouse) and Mouse Key=1 Then LEVEL=1 : Goto SPIEL
  12.    If 2=Hzone(X Mouse,Y Mouse) and Mouse Key=1 Then Goto PASSWORT
  13.    If 3=Hzone(X Mouse,Y Mouse) and Mouse Key=1 Then Gosub INDE
  14. Loop 
  15. SPIEL:
  16. 'Fade 1 : Wait 15
  17. Limit Mouse 176,47 To 400,236
  18. Screen Open 1,640,38,16,Hires : Screen Display 1,,248,, : Curs Off : Colour 1,$0
  19. Screen Open 0,320,256,32,Lowres
  20.  
  21. Curs Off : Flash Off 
  22. '
  23. ' Die Memory Bank braucht bei 10 Leveln ca. 50 Kbyte weniger 
  24. ' Speicher als dim c(3,40,40)  
  25. '
  26.  
  27.  
  28. Unpack 3 To 0
  29. Screen To Front 1
  30. 'Cls 0 
  31. Double Buffer 
  32. Autoback 0
  33. '
  34. ' LEV = Level (0-9)
  35. ' X/Y = Position (3-37)
  36. ' R = Richtung 1=NORD / 2=OST / 3=SUED / 4=WEST  
  37. ' XC/YC = Position des Dungeons auf dem Bildschirm 
  38. ' F1/F2 = Spiegelung des Hintergrund Bob bei einem Schritt 
  39. ' BU = Knopf Nummer ...
  40. '
  41. If LEVEL=1 Then X=10 : Y=9 : R=4 : XC=48 : YC=5 : F1=$8001 : F2=$1 : BU=0 : LEV=0
  42. If LEVEL=2 Then X=14 : Y=11 : R=2 : XC=48 : YC=5 : F1=$8001 : F2=$1 : BU=0 : LEV=1
  43. If LEVEL=3 Then X=5 : Y=25 : R=1 : XC=48 : YC=5 : F1=$8001 : F2=$1 : BU=0 : LEV=2
  44. If LEVEL=4 Then X=16 : Y=37 : R=4 : XC=48 : YC=5 : F1=$8001 : F2=$1 : BU=0 : LEV=3
  45.  
  46. Global X,Y,R,T,XC,YC,F1,F2,LEV,BU
  47. _ZONE
  48. _DRAW
  49. Limit Bob 49,10 To 272,140
  50. Screen Copy Logic To Physic
  51. Limit Bob 49,10 To 272,140
  52.  
  53. ' Hauptschleife
  54. '
  55.  
  56. If LEV=0 : Colour 13,$70 : Colour 15,$90 : Colour 2,$60 : Colour 1,$30 : Colour 12,$10 : End If 
  57. If LEV=1 : Colour 13,$700 : Colour 15,$900 : Colour 2,$600 : Colour 1,$300 : Colour 12,$100 : End If 
  58. If LEV=2 : Colour 13,$7 : Colour 15,$9 : Colour 2,$6 : Colour 1,$3 : Colour 12,$1 : End If 
  59. If LEV=3 : Colour 13,$222 : Colour 15,$333 : Colour 2,$111 : Colour 1,$0 : Colour 12,$111 : End If 
  60.  
  61. Repeat 
  62.    _TASTE
  63. Until T=69
  64. '
  65. ' UM EINEN SPIELSTAND ZU SICHERN EINFACH     
  66. ' BANK 2 UND DIE VARIABLEN X + Y + R + LEV SPEICHERN 
  67. Erase 1
  68. Erase 2
  69. Erase 5
  70. '
  71. ' Ende 
  72. '
  73. End 
  74. '
  75. '
  76. '  
  77.  
  78. Procedure _ZONE
  79.    Reserve Zone 11
  80.    Set Zone 1,122,151 To 148,170
  81.    Set Zone 2,152,151 To 176,170
  82.    Set Zone 3,180,151 To 205,170
  83.    Set Zone 4,122,173 To 148,191
  84.    Set Zone 5,152,173 To 176,191
  85.    Set Zone 6,180,173 To 205,191
  86. End Proc
  87. Procedure _TASTE
  88.    ST=Start(2)+LEV*1681
  89.    Repeat 
  90.       M=Mouse Key
  91.       MZ=Mouse Zone
  92.       A$=Inkey$
  93.       T=Scancode
  94.    Until A$<>"" or M=1
  95.    X1=X : Y1=Y
  96.    If MZ=2 and M Then T=76
  97.    If MZ=5 and M Then T=77
  98.    If MZ=6 and M Then T=78
  99.    If MZ=4 and M Then T=79
  100.    If BU>0 and MZ=7 and M Then _BUTTONPRESS
  101.    If BU>0 and Asc(A$)=13 Then _BUTTONPRESS
  102.    If R=1 and T=76 Then Dec Y1
  103.    If R=2 and T=76 Then Inc X1
  104.    If R=3 and T=76 Then Inc Y1
  105.    If R=4 and T=76 Then Dec X1
  106.    If R=1 and T=77 Then Inc Y1
  107.    If R=2 and T=77 Then Dec X1
  108.    If R=3 and T=77 Then Dec Y1
  109.    If R=4 and T=77 Then Inc X1
  110.    If R=1 and T=78 Then Inc X1
  111.    If R=2 and T=78 Then Inc Y1
  112.    If R=3 and T=78 Then Dec X1
  113.    If R=4 and T=78 Then Dec Y1
  114.    If R=1 and T=79 Then Dec X1
  115.    If R=2 and T=79 Then Dec Y1
  116.    If R=3 and T=79 Then Inc X1
  117.    If R=4 and T=79 Then Inc Y1
  118.    If T=70 or MZ=1 and M Then R=R-1 : If R=0 Then R=4
  119.    If T=95 or MZ=3 and M Then R=R+1 : If R=5 Then R=1
  120.    C=Peek(ST+X1+Y1*41)
  121.    If C=3
  122.       Inc LEV
  123.       If LEV=0 : Colour 13,$70 : Colour 15,$90 : Colour 2,$60 : Colour 1,$30 : Colour 12,$10 : End If 
  124.       If LEV=1 : Colour 13,$700 : Colour 15,$900 : Colour 2,$600 : Colour 1,$300 : Colour 12,$100 : End If 
  125.       If LEV=2 : Colour 13,$7 : Colour 15,$9 : Colour 2,$6 : Colour 1,$3 : Colour 12,$1 : End If 
  126.       If LEV=3 : Colour 13,$222 : Colour 15,$333 : Colour 2,$111 : Colour 1,$0 : Colour 12,$111 : End If 
  127.    End If 
  128.    If C=2
  129.       Dec LEV
  130.       If LEV=0 : Colour 13,$70 : Colour 15,$90 : Colour 2,$60 : Colour 1,$30 : Colour 12,$10 : End If 
  131.       If LEV=1 : Colour 13,$700 : Colour 15,$900 : Colour 2,$600 : Colour 1,$300 : Colour 12,$100 : End If 
  132.       If LEV=2 : Colour 13,$7 : Colour 15,$9 : Colour 2,$6 : Colour 1,$3 : Colour 12,$1 : End If 
  133.       If LEV=3 : Colour 13,$222 : Colour 15,$333 : Colour 2,$111 : Colour 1,$0 : Colour 12,$111 : End If 
  134.       If LEV=-1 : Fade 10 : Wait 150
  135.          Default : Curs Off : Hide 
  136.          Print 
  137.          Centre "Well done!" : Print : Print 
  138.          Centre "You escaped the enemy" : Print 
  139.          Centre "and saved the world." : Print : Print : Print : Print : Print 
  140.          Centre "Dungeon Hero was created by Frank Otto" : Print : Print : Print 
  141.          Centre "Click mouse to continue."
  142.          While Mouse Click=0 : Wend 
  143.          Fade 3 : Wait 45
  144.       End : End If 
  145.    End If 
  146.    ST=Start(2)+LEV*1681
  147.    C=Peek(ST+X1+Y1*41)
  148.    If C>0 and C<6 and X<>X1 or C>0 and C<6 and Y<>Y1
  149.       If X1>1 and X1<38 and Y1>1 and Y1<38
  150.          Swap F1,F2 : Limit Bob 49,10 To 272,140
  151.          X=X1 : Y=Y1
  152.       End If 
  153.    Else 
  154.       C=Peek(ST+X1+Y1*41)
  155.       If C<1 or C>5
  156.          Shoot 
  157.       End If 
  158.    End If 
  159.    _DRAW
  160.    Screen Swap : Wait Vbl 
  161. End Proc
  162. Procedure _DRAW
  163.    Limit Bob 49,10 To 272,140
  164.    
  165.    Cls 0,48,5 To 272,140
  166.    Cls 0,120,100 To 207,195
  167.    Paste Bob XC,YC,F1
  168.    Paste Bob 120,150,16
  169.    _DRAWDUNGEON
  170.    '   Cls 0,0,0 To 48,200
  171.    '   Cls 0,272,0 To 320,200 
  172.    Colour 3,$802
  173.    Ink 8,0
  174.    '   Text 20,10,"Level:"
  175.    Text 11,28,Str$(LEV)
  176.    '   Text 275,40,"Y:" 
  177.    Text 290,30,Str$(X)
  178.    '   Text 275,70,"X:" 
  179.    Text 280,70,Str$(Y)
  180.    '
  181.    ' ********************** HIER FUER EIGENE LEVEL AENDERN **************** 
  182.    '  
  183.    ' SCHREIBT Z.B. EINEN TEXT WENN MAN IN LEVEL 0 AN POSIT. x=9/y=10 STEHT
  184.    ' UND RICHTUNG (R=1) NORDEN SCHAUT 
  185.    BU=0
  186.    
  187.    If R=1
  188.       Text 145,148,"North"
  189.       '      If LEV=0 and Y=9 and X=10 
  190.       '         _TEXT[""]
  191.       '      End If  
  192.       If LEV=1 and Y=11 and X=14
  193.          _TEXT["kerenas"]
  194.       End If 
  195.       If LEV=2 and Y=3 and X=5
  196.          BUTTON[160,67]
  197.          BU=7
  198.       End If 
  199.       If LEV=0 and Y=11 and X=12
  200.          Screen 1 : CLEAR : Locate ,0 : Cline : Print "Behind this door is the exit." : Screen 0
  201.       End If 
  202.    End If 
  203.    ' HIER DAS SELBE IN GRUEN FUER RICHTUNG OSTEN (R=2)  
  204.    If R=2
  205.       Text 145,148,"East"
  206.       If LEV=0 and Y=17 and X=6
  207.          _TEXT["room of illusions"]
  208.       End If 
  209.       If LEV=1 and Y=11 and X=17
  210.          BUTTON[219,52]
  211.          BU=6
  212.       End If 
  213.       If LEV=2 and Y=21 and X=7
  214.          BUTTON[219,52]
  215.          BU=8
  216.       End If 
  217.    End If 
  218.    ' HIER WIRD DER KNOPF NR. 2 FUER DIE TUER GEMALT (Proc BUTTON[x,y])
  219.    ' UND AKTIVIERT (BU=2) 
  220.    ' ABGEFRAGT WAS PASSIERT WENN DER KNOPF NR.2 GEDRUECKT WIRD
  221.    ' ERFOLGT IN DER PROCEDURE (_BUTTONPRESS)  
  222.    If R=3
  223.       Text 145,148,"South"
  224.       If LEV=3 and Y=37 and X=16
  225.          _TEXT["aronid"]
  226.       End If 
  227.       If LEV=0 and Y=13 and X=8
  228.          BUTTON[180,60]
  229.          BU=2
  230.       End If 
  231.    End If 
  232.    If R=4
  233.       Text 145,148,"West "
  234.       If LEV=2 and Y=24 and X=5
  235.          _TEXT["daronef"]
  236.       End If 
  237.       If LEV=0 and Y=4 and X=3
  238.          BUTTON[160,67]
  239.          BU=3
  240.       End If 
  241.       If LEV=0 and Y=11 and X=6
  242.          BUTTON[219,52]
  243.          BU=4
  244.       End If 
  245.    End If 
  246.    If LEV=0 and Y=12 and X=8
  247.       Screen 1 : CLEAR : Locate ,0 : Cline : Print "Here lies a skeleton. It looks as if it came from the southern wall." : Screen 0
  248.    End If 
  249.    If LEV=0 and Y=9 and X=10
  250.       Screen 1 : CLEAR : Locate ,0 : Cline : Print "There is something in the middle of the room." : Screen 0
  251.    End If 
  252.    If LEV=0 and Y=15 and X=8
  253.       Screen 1 : CLEAR : Locate ,0 : Cline : Print "Here are the remains of weapons and equipment but all has been destroyed." : Screen 0
  254.    End If 
  255.    If LEV=0 and Y=11 and X=6
  256.       Screen 1 : CLEAR : Screen 0
  257.    End If 
  258.    If LEV=0 and Y=19 and X=6
  259.       Screen 1 : CLEAR : Locate ,0 : Cline : Print "A liitle breath is coming from the northern wall." : Screen 0
  260.    End If 
  261.    If LEV=0 and Y=11 and X=27
  262.       Screen 1 : CLEAR : Locate ,0 : Cline : Print "Behind this door is the exit." : Screen 0
  263.    End If 
  264.    If LEV=0 and Y=17 and X=8
  265.       Screen 1 : CLEAR : Screen 0
  266.    End If 
  267.    If LEV=1 and Y=11 and X=14
  268.       Screen 1 : CLEAR : Screen 0
  269.    End If 
  270.    If LEV=1 and Y=11 and X=24
  271.       Screen 1 : CLEAR : Screen 0
  272.    End If 
  273.    If LEV=4 and Y=17 and X=18
  274.       _TEXT["ende"]
  275.    End If 
  276.    If LEV=4 and Y=17 and X=22
  277.       _TEXT["ende"]
  278.    End If 
  279. End Proc
  280. Procedure _DRAWDUNGEON
  281.    ' ********************* ACHTUNG ****************** 
  282.    ' MAN KANN DIE BERECHNUNG DES DUNGEUN ZWAR VERKUERZEN
  283.    ' WAS BEI MEINEM 68030 AUCH ZU EINER ERHEBLICHEN GESCHWINDIGKEITS
  284.    ' STEIGERUNG FUEHRT, DOCH EIN NORMALER AMIGA MUSS DANN ZUVIEL  
  285.    ' BERECHNEN UND SCHLAEFT FAST EIN !  
  286.    ' ALSO HIER ALLES GANZ AUSFUEHRLICH: 
  287.    ' Links
  288.    ST=Start(2)+LEV*1681
  289.    If R=1 and Peek(ST+X-2+(Y-2)*41)<2 and Peek(ST+X-1+(Y-1)*41)>1 Then Paste Bob XC,YC,9
  290.    If R=2 and Peek(ST+X+2+(Y-2)*41)<2 and Peek(ST+X+1+(Y-1)*41)>1 Then Paste Bob XC,YC,9
  291.    If R=3 and Peek(ST+X+2+(Y+2)*41)<2 and Peek(ST+X+1+(Y+1)*41)>1 Then Paste Bob XC,YC,9
  292.    If R=4 and Peek(ST+X-2+(Y+2)*41)<2 and Peek(ST+X-1+(Y+1)*41)>1 Then Paste Bob XC,YC,9
  293.    If R=1 Then C=Peek(ST+X-1+(Y-3)*41)
  294.    If R=2 Then C=Peek(ST+X+3+(Y-1)*41)
  295.    If R=3 Then C=Peek(ST+X+1+(Y+3)*41)
  296.    If R=4 Then C=Peek(ST+X-3+(Y+1)*41)
  297.    If C<2 Then Paste Bob XC,YC,8
  298.    If C=2 Then Paste Bob XC,YC,12
  299.    If C=3 Then Paste Bob XC,YC,15
  300.    If C=5 Then Paste Bob XC,YC,9 : Paste Bob XC+11,YC+29,19
  301.    If C=6 Then Paste Bob XC,YC,9 : Paste Bob XC+11,YC+29,19 : Paste Bob XC+19,YC+30,23
  302.    If R=1 Then C=Peek(ST+X-1+(Y-2)*41) : C1=Peek(ST+X-1+(Y-1)*41)
  303.    If R=2 Then C=Peek(ST+X+2+(Y-1)*41) : C1=Peek(ST+X+1+(Y-1)*41)
  304.    If R=3 Then C=Peek(ST+X+1+(Y+2)*41) : C1=Peek(ST+X+1+(Y+1)*41)
  305.    If R=4 Then C=Peek(ST+X-2+(Y+1)*41) : C1=Peek(ST+X-1+(Y+1)*41)
  306.    If C<2 Then Paste Bob XC,YC,7
  307.    If C=2 and C1=4 Then Paste Bob XC-20,YC,11
  308.    If C=3 and C1=4 Then Paste Bob XC-20,YC,14
  309.    If C=5 and C1=4 Then Paste Bob XC-9,YC+23,18
  310.    If C=6 and C1=4 Then Paste Bob XC-9,YC+23,18 : Paste Bob XC+4,YC+24,22
  311.    If R=1 Then C=Peek(ST+X-1+(Y-1)*41) : C1=Peek(ST+X-1+Y*41)
  312.    If R=2 Then C=Peek(ST+X+1+(Y-1)*41) : C1=Peek(ST+X+(Y-1)*41)
  313.    If R=3 Then C=Peek(ST+X+1+(Y+1)*41) : C1=Peek(ST+X+1+Y*41)
  314.    If R=4 Then C=Peek(ST+X-1+(Y+1)*41) : C1=Peek(ST+X+(Y+1)*41)
  315.    If C<2 Then Paste Bob XC,YC,6
  316.    If C=2 and C1=4 Then Paste Bob XC-60,YC,10
  317.    If C=3 and C1=4 Then Paste Bob XC-60,YC,26
  318.    If C=6 and C1=4 Then Paste Bob XC-9,YC+17,24
  319.    If C1<2 Then Paste Bob XC,YC,5
  320.    '   Rechts 
  321.    If R=1 and Peek(ST+X+2+(Y-2)*41)<2 and Peek(ST+X+1+(Y-1)*41)>1 Then Paste Bob XC+192,YC,$8009
  322.    If R=2 and Peek(ST+X+2+(Y+2)*41)<2 and Peek(ST+X+1+(Y+1)*41)>1 Then Paste Bob XC+192,YC,$8009
  323.    If R=3 and Peek(ST+X-2+(Y+2)*41)<2 and Peek(ST+X-1+(Y+1)*41)>1 Then Paste Bob XC+192,YC,$8009
  324.    If R=4 and Peek(ST+X-2+(Y-2)*41)<2 and Peek(ST+X-1+(Y-1)*41)>1 Then Paste Bob XC+192,YC,$8009
  325.    If R=1 Then C=Peek(ST+X+1+(Y-3)*41)
  326.    If R=2 Then C=Peek(ST+X+3+(Y+1)*41)
  327.    If R=3 Then C=Peek(ST+X-1+(Y+3)*41)
  328.    If R=4 Then C=Peek(ST+X-3+(Y-1)*41)
  329.    If C<2 Then Paste Bob XC+128,YC,$8000+8
  330.    If C=2 Then Paste Bob XC+148,YC,12
  331.    If C=3 Then Paste Bob XC+148,YC,15
  332.    If C=5 Then Paste Bob XC+192,YC,$8009 : Paste Bob XC+151,YC+29,19
  333.    If C=6 Then Paste Bob XC+192,YC,$8009 : Paste Bob XC+151,YC+29,19 : Paste Bob XC+159,YC+30,23
  334.    If R=1 Then C=Peek(ST+X+1+(Y-2)*41) : C1=Peek(ST+X+1+(Y-1)*41)
  335.    If R=2 Then C=Peek(ST+X+2+(Y+1)*41) : C1=Peek(ST+X+1+(Y+1)*41)
  336.    If R=3 Then C=Peek(ST+X-1+(Y+2)*41) : C1=Peek(ST+X-1+(Y+1)*41)
  337.    If R=4 Then C=Peek(ST+X-2+(Y-1)*41) : C1=Peek(ST+X-1+(Y-1)*41)
  338.    If C<2 Then Paste Bob XC+144,YC,$8000+7
  339.    If C=2 and C1=4 Then Paste Bob XC+139,YC,11
  340.    If C=3 and C1=4 Then Paste Bob XC+139,YC,14
  341.    If C=5 and C1=4 Then Paste Bob XC+139,YC+23,18
  342.    If C=6 and C1=4 Then Paste Bob XC+139,YC+23,18 : Paste Bob XC+154,YC+24,22
  343.    If R=1 Then C=Peek(ST+X+1+(Y-1)*41) : C1=Peek(ST+X+1+Y*41)
  344.    If R=2 Then C=Peek(ST+X+1+(Y+1)*41) : C1=Peek(ST+X+(Y+1)*41)
  345.    If R=3 Then C=Peek(ST+X-1+(Y+1)*41) : C1=Peek(ST+X-1+Y*41)
  346.    If R=4 Then C=Peek(ST+X-1+(Y-1)*41) : C1=Peek(ST+X+(Y-1)*41)
  347.    If C<2 Then Paste Bob XC+160,YC,$8000+6
  348.    If C=2 and C1=4 Then Paste Bob XC+114,YC,10
  349.    If C=3 and C1=4 Then Paste Bob XC+114,YC,13
  350.    If C=6 and C1=4 Then Paste Bob XC+183,YC+17,24
  351.    If C1<2 Then Paste Bob XC+192,YC,$8000+5
  352.    '   Mitte
  353.    I=5
  354.    If R=1 Then JA=-3 : JB=-1 : JS=1 : RI=1
  355.    If R=2 Then JA=3 : JB=1 : JS=-1 : RI=0
  356.    If R=3 Then JA=3 : JB=1 : JS=-1 : RI=1
  357.    If R=4 Then JA=-3 : JB=-1 : JS=1 : RI=0
  358.    J1=0
  359.    For J=JA To JB Step JS
  360.       Dec I
  361.       If I=4 Then BW=74 : TUY=29 : TUX=6 : TU1=14 : TU2=30
  362.       If I=3 Then BW=60 : TUY=23 : TUX=5 : TU1=20 : TU2=24
  363.       If I=2 Then BW=32 : TUY=14 : TUX=10 : TU1=31 : TU2=17
  364.       If RI=1 Then Swap J,J1 : Limit Bob 49,10 To 272,140
  365.       C=Peek(ST+X+J+(Y+J1)*41)
  366.       If C<2 Then Paste Bob XC+BW,YC,I
  367.       If C<2 and I=2 and Peek(ST+X+Y*41)=5 Then Paste Bob XC+95,YC,20
  368.       If C=2 Then Paste Bob XC+BW,YC,I+8
  369.       If C=3 Then Paste Bob XC+BW,YC,I+11
  370.       If C=5 Then Paste Bob XC+BW+TUX,YC+TUY,I+15
  371.       If C=6 Then Paste Bob XC+BW+TUX,YC+TUY,I+15 : Paste Bob XC+TU1+BW,YC+TU2,I+19
  372.       If RI=1 Then Swap J,J1
  373.    Next J
  374. End Proc
  375. Procedure _TEXT[T$]
  376.    TX=XC+(224-Len(T$)*8)/2
  377.    TY=50
  378.    T$=Upper$(T$)
  379.    Gr Writing 0
  380.    Ink 15 : Text TX-1,YC+TY-1,T$
  381.    '         Ink 0 : Text TX+1,YC+TY+1,T$ 
  382.    Ink 0 : Text TX,YC+TY,T$
  383.    Ink 8,0 : Gr Writing 1
  384. End Proc
  385. Procedure _OEFFNETUER
  386.    Update Off 
  387.    TU1=63
  388.    _DRAW
  389.    Get Bob 0,25,XC,YC+17 To XC+63,110
  390.    Limit Bob 1,10,20 To 130,140
  391.    Repeat 
  392.       Bob Clear 
  393.       Bob 0,XC+TU1,YC+17,21
  394.       Bob 1,XC,YC+17,25
  395.       Bob Draw 
  396.       '      Cls 0,0,20 To XC,200
  397.       Screen Swap : Wait Vbl 
  398.       If TU1=63 Then _DRAW
  399.       TU1=TU1-2
  400.    Until TU1<-29
  401.    Boom 
  402. End Proc
  403. Procedure _SCHLIESSTUER
  404.    Update Off 
  405.    TU1=-37
  406.    _DRAW
  407.    Get Bob 0,25,XC,YC+17 To XC+63,110
  408.    Repeat 
  409.       Bob Clear 
  410.       Bob 0,XC+TU1,YC+17,21
  411.       Bob 1,XC,YC+17,25
  412.       Bob Draw 
  413.       '      Cls 0,0,20 To XC,200
  414.       Screen Swap : Wait Vbl 
  415.       If TU1=-37 Then _DRAW
  416.       TU1=TU1+2
  417.    Until TU1=63
  418.    Boom 
  419. End Proc
  420. Procedure _BUTTONPRESS
  421.    '
  422.    ' ***************** MUSS FUER EIGENE LABYRINTHE GEAENDERT WERDEN  ************ 
  423.    ' Poke(st+X+Y*41),A
  424.    ' A = -------------- 
  425.    ' 0 = Wand 
  426.    ' 1 = Imaginaere Wand  
  427.    ' 2/3 = Treppe 
  428.    ' 4 = Freie Stelle 
  429.    ' 5 = Rahmen (offene Tuer) 
  430.    ' 6 = Tuer + Rahmen
  431.    '
  432.    ' HIER EIN PAAR BEISPIELE
  433.    ' WENN KNOPF NR.3 GEDRUECKT DANN OEFFNE WAND AN POSIT. x=11/y=12 
  434.    ST=Start(2)+LEV*1681
  435.    If BU=3
  436.       Poke(ST+11+12*41),4
  437.       Bell 
  438.    End If 
  439.    '
  440.    ' WENN KNOPF NR.2 GEDRUECKT UND TUER IST ZU DANN OEFFNE TUER AN POSIT. x=8/y=14  
  441.    If BU=2
  442.       Boom 
  443.    End If 
  444.    '
  445.    '
  446.    ' WENN KNOPF NR.4 GEDRUECKT UND TUER IST ZU DANN OEFFNE TUER AN POSIT. x=5/y=11
  447.    If BU=4
  448.       If Peek(ST+5+11*41)=6
  449.          Poke(ST+5+11*41),5
  450.          _OEFFNETUER
  451.          ' WENN KNOPF NR.4 GEDRUECKT UND TUER IST AUF DANN SCHLIESSE TUER AN POSIT. x=5/y=11    
  452.       Else 
  453.          _SCHLIESSTUER
  454.          Poke(ST+5+11*41),6
  455.       End If 
  456.    End If 
  457.    '
  458.    '
  459.    ' WENN KNOPF NR.5 GEDRUECKT UND TUER IST ZU DANN OEFFNE TUER AN POSIT. x=12/y=12 
  460.    If BU=5
  461.       If Peek(ST+12+12*41)=6
  462.          Poke(ST+12+12*41),5
  463.          _OEFFNETUER
  464.          ' WENN KNOPF NR.5 GEDRUECKT UND TUER IST AUF DANN SCHLIESSE TUER AN POSIT. x=12/y=12 
  465.       Else 
  466.          _SCHLIESSTUER
  467.          Poke(ST+12+12*41),6
  468.       End If 
  469.    End If 
  470.    
  471.    
  472.    ' WENN KNOPF NR 6 GEDRUECKT UND TUER IST ZU DANN OEFFNE TUER AN POSIT 0.0X=11/Y=18 
  473.    If BU=6
  474.       If Peek(ST+18+11*41)=6
  475.          Poke(ST+18+11*41),5
  476.          _OEFFNETUER
  477.          ' WENN KNOPF NR.6 GEDRUECKT UND TUER IST AUF DANN SCHLIESSE TUER AN POSIT. x=11/y=18 
  478.       Else 
  479.          _SCHLIESSTUER
  480.          Poke(ST+18+11*41),6
  481.       End If 
  482.    End If 
  483.    ' WENN KNOPF NR 7 GEDRUECKT UND TUER IST ZU DANN OEFFNE WAND AN POSIT X=6/Y=21 
  484.    If BU=7
  485.       If Peek(ST+6+21*41)=0
  486.          Poke(ST+6+21*41),4
  487.          Screen 1 : CLEAR : Locate ,0 : Cline : Print "Sounds as if a wall is moving." : Screen 0
  488.          ' WENN KNOPF NR.7 GEDRUECKT UND TUER IST AUF DANNgu SCHLIESSE TUER AN POSIT. x=6/y=21  
  489.       Else 
  490.          Poke(ST+6+21*41),0
  491.          Boom 
  492.       End If 
  493.    End If 
  494.    ' WENN KNOPF NR 8 GEDRUECKT UND TUER IST ZU DANN OEFFNE TUER AN POSIT 0.0X=8/Y=21  
  495.    If BU=8
  496.       If Peek(ST+8+21*41)=6
  497.          Poke(ST+8+21*41),5
  498.          _OEFFNETUER
  499.          ' WENN KNOPF NR.8 GEDRUECKT UND TUER IST AUF DANN SCHLIESSE TUER AN POSIT. x=8/y=21  
  500.       Else 
  501.          _SCHLIESSTUER
  502.          Poke(ST+8+21*41),6
  503.       End If 
  504.    End If 
  505.    If BU=9
  506.       If Peek(ST+14+13*41)=6
  507.          Poke(ST+14+13*41),5
  508.          _OEFFNETUER
  509.          ' WENN KNOPF NR.9 GEDRUECKT UND TUER IST AUF DANN SCHLIESSE TUER AN POSIT. x=8/y=21  
  510.       Else 
  511.          _SCHLIESSTUER
  512.          Poke(ST+14+13*41),6
  513.       End If 
  514.    End If 
  515. End Proc
  516. Procedure BUTTON[XB,YB]
  517.    Ink 0
  518.    Bar XB-2,YB-2 To XB+2,YB+2
  519.    Ink 3
  520.    Bar XB-1,YB-1 To XB+1,YB+1
  521.    Ink 15
  522.    Plot XB,YB
  523.    Reset Zone 7
  524.    Set Zone 7,XB-2,YB-2 To XB+2,YB+2
  525. End Proc
  526.  
  527. PASSWORT:
  528. Locate 2,28 : Paper 0 : Pen 13 : Input "Password: ";PW$
  529. Do 
  530.    If Upper$(PW$)="KERENAS" Then LEVEL=2 : Exit 
  531.    If Upper$(PW$)="ARONID" Then LEVEL=4 : Exit 
  532.    If Upper$(PW$)="DARONEF" Then LEVEL=3 : Exit Else LEVEL=1 : Exit 
  533. Loop 
  534. Goto SPIEL
  535. INDE:
  536. Gr Writing 0 : Get Block 1,0,200,320,56 : Locate 2,28 : Ink 9 : Text 20,229,"Really quit (Y)es/(N)o? "
  537.  
  538. Do 
  539.    A$=Inkey$
  540.    If A$="y" : Fade 1 : Wait 15 : End : End If 
  541.    If A$="n" : Put Block 1 : Return : End : End If 
  542. Loop 
  543.  
  544. Procedure CLEAR
  545.    Ink 0 : Bar 0,0 To 640,40
  546. End Proc